package com.jwinf.cdLibary.tool;

import com.alibaba.druid.pool.DruidDataSource;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;


/**
 * @author jwinf
 * 数据库连接工具类
 * 配置一个数据库连接池
 * 使用druid数据库连接池
 */
public class JDBCUtil {
    // 顶一个属性加载对象
    private static Properties properties = new Properties();
    // 定义一个连接池对象  静态饿汉单例
    private static DruidDataSource dataSource = new DruidDataSource();

    // 静态代码块
    static {
        try {
            // 获取程序运行的系统路径
            String rootPath = System.getProperty("user.dir").replace("\\", "/");
            // 加载配置文件
            properties.load(new FileInputStream( rootPath + "/dbconfig.properties"));
            // 设置连接池驱动器类
            dataSource.setDriverClassName(properties.getProperty("DriveClassName"));
            // 设置连接池的数据库连接url
            dataSource.setUrl(properties.getProperty("Url"));
            // 设置数据库用户名
            dataSource.setUsername(properties.getProperty("USER"));
            // 设置数据库密码
            dataSource.setPassword(properties.getProperty("Password"));
            // 设置最大没有空闲连接时的最大等待时间
            dataSource.setMaxWait(Long.parseLong(properties.getProperty("MAX_Wait")));
            // 设置初始化的连接数量
            dataSource.setInitialSize(Integer.parseInt(properties.getProperty("Init")));
            // 设置连接的最大空余时间
            dataSource.setMaxActive(Integer.parseInt(properties.getProperty("MAX_Active")));
            // 开启预编译功能 提高性能
            dataSource.setPoolPreparedStatements(Boolean.parseBoolean(properties.getProperty("poolPreparedStatements")));
            dataSource.setMaxOpenPreparedStatements(Integer.parseInt(properties.getProperty("maxOpenPreparedStatements")));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 对外暴露一个 获取数据源的方法
    public static DruidDataSource newInstance(){
        return dataSource;
    }
}
